/* @flow */

import { toArray } from '../util/index'

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    // 先检测这个插件是否安装过
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }
    // additional parameters   使用Vue.use(xxx,{},a1)
    const args = toArray(arguments, 1)
    args.unshift(this) // [Vue,{},a1]
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args) // 默认调用install方法
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args) // 直接是函数就让函数执行 插件的第一个参数就是Vue的构造函数 ，喊出就是我们的插件不用依赖于固定的Vue版本
    }
    installedPlugins.push(plugin)
    return this
  }
}
